iT邦幫忙

2024 iThome 鐵人賽

DAY 29
1

前一版語意模型發布一個月後,商業使用者開出了新的需求,需要一份包含業績目標的報表。這間公司會以月來設定不同產品種類的業績目標。

目前的語意模型長這樣:

https://ithelp.ithome.com.tw/upload/images/20241011/201631031WWVPJ0YmN.jpg

資料轉換

業績目標是以產品以及月份為顆粒度,因此可以預期他主要的欄位有以下:

date_key product_category_key sales_target

可以發現,目前的語意模型維度表的顆粒度是「日」以及「產品」,如果直接將 productsales_target 做連結會是多對多的關聯性。這時候就需要引進新的「產品種類維度表」 (product_category)。月的部分則可以透過每個月最後一天去對應 date_key 即可保持一對多的關聯性。

因此在這裡,需要透過 dbt 產生兩張表 dim_product_category 以及 fct_sales_target

新建關聯性、語意模型以及 DAX

做好資料轉換後,就可以在語意模型建立關聯性,資料模型也從星狀結構變成銀河結構 (galaxy schema)。

https://ithelp.ithome.com.tw/upload/images/20241013/20163103mAL6iQrAew.jpg

之後可以開始寫 DAX

  1. 業績目標: Sales Target:= SUM('Sales Target'[sales_target])
  2. 業績達成率: Sales Achievement Rate:= DIVIDE([Sales Revenue], [Sales Target], BLANK())
    這樣就可以完成新增的業績目標了。

完成後按同樣到左上角「檔案」 → 「發行」覆蓋原本的語意模型即可。

「視覺效果」層逐步更新

但這樣更新其實會產生一點小問題:報表製作者可以從兩個地方獲得 product_category_name 的資訊。而且如果從 product 表中取用,就沒辦法連動到 fct_sales_target。這時可以採取以下步驟:

  1. 隱藏 product 表的 product_category_name 欄位 → 不會影響到既有報表,又能防止新報表從 productproduct_category_name

https://ithelp.ithome.com.tw/upload/images/20241013/20163103ngq5WGuHc1.jpg

  1. 跟報表開發者溝通,請他們在一定時間內將既有報表的欄位從 product[product_category_name] 改成 product_category[product_category_name]
  2. 時間到後,移除 product[product_category_name]

實際應用

新增業績目標的資料模型以及量值後後,就可以交叉分析業績以及業績目標了。

https://ithelp.ithome.com.tw/upload/images/20241013/20163103ZGNzwb9ErL.jpg

同樣的不管是 Sales Revenue, Sales Target, 或是 Sales Achievement Rate,都用了同一組篩選語境。另外也可以看到業績目標在每日的列中幾乎是空白的,那是因為業績目標是以月為單位,我們處理資料的方式也讓他通通呈現在月底。如果希望可以讓每日都能分到一點業績目標,也可以在處理資料模型前就先做好資料轉換。

最後,這個報表的篩選語境,就如下圖:

https://ithelp.ithome.com.tw/upload/images/20241013/20163103kOzX2dbptl.jpg

維度表就像八爪章魚一樣,利用篩選語境從不同的事實表篩選出需要的列後,根據 DAX 進行相對的運算。如果維度表可以關聯的事實表越多,自然越有機會做不同商務流程的交叉分析。

Power BI 的 Data Modeling 與 DAX 到此結束。


上一篇
Day 28 - DAX 的兩種「語境」 (context) - 列語境 (Row Context)
下一篇
Day 30 - 完賽心得
系列文
華人市場資料打撈師求生指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言